import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase para crear el jefe del juego
 * 
 * @author Omar Espino
 * @version 27/11/2014
 */
public class Jefe extends Enemigo
{
    private GreenfootImage parado;
    private GreenfootImage brincando;
    private int movimientoX;
    private int movimientoY;
    private int healt;
    private SimpleTimer relojCamina;
    private SimpleTimer relojAtaque;
    private int contadorPasos;
    private final GreenfootSound llama=new GreenfootSound("llama.wav");
    
    /**constructor de la clase del jefe*/
    public Jefe()
    {
       parado=new GreenfootImage("jefeparado.png");
       brincando=new GreenfootImage("jefebrincando.png");
       healt=2000;
       movimientoX=-3;
       movimientoY=5;
       relojCamina=new SimpleTimer();
       relojAtaque=new SimpleTimer();
       contadorPasos=0;
       llama.setVolume(65);
    }
    
    /**metodo para la actuacion principal del jefe, metodo llamado automaticamente por greenfoot*/
    public void act() 
    {
        MundoIceClimber mundo=(MundoIceClimber)getWorld();
        mundo.getCartelJefe().setValue(healt);
        
        if(isTouching(Bloque.class))
        {
            setImage(parado);
        }
        else
        {
            setImage(brincando);
        }
        
        if(relojCamina.millisElapsed()>25)
        {
           setLocation(getX()+movimientoX,getY());
           contadorPasos++;
           relojCamina.mark();
        }
        
        if(contadorPasos==70)
        {
         if(isTouching(Bloque.class))
         {
            brinca();
            contadorPasos=0;
            movimientoX=movimientoX*-1;
         }
        }
        
        if(relojAtaque.millisElapsed()>1300)
        {
            ataca();
            relojAtaque.mark();
        }
        
        caer();
    } 
    
    /**metodo que hace que brinque el jefe*/
    public void brinca()
    {
        
        for(int i=0;i<50;i++)
        { 
            setImage(brincando);
            setLocation(getX(),getY()-movimientoY);
            
        }
    }
    
    /**metodo para que el jefe tenga gravedad*/
    public void caer()
    {
        if(isTouching(Bloque.class)!=true)
        {
            setLocation(getX(),getY()+movimientoY);
        } 
    }
    
    /**metodo para que el jefe ataque al jugador */
    public void ataca()
    {
        int random;
        random=Greenfoot.getRandomNumber(5);
        Llama llama1=new Llama();
        switch(random)
        {
            case 0:getWorld().addObject(llama1,getX()-5,getY()-60);
                   break;
            case 1:getWorld().addObject(llama1,getX()-5,getY()-35);
                   break;
            case 2:getWorld().addObject(llama1,getX()-5,getY());
                   break;
            case 3:getWorld().addObject(llama1,getX()-5,getY()+35);
                   break;
            case 4:getWorld().addObject(llama1,getX()-5,getY()+60);
                   break;
        }
        llama.play();
    }
    
    /**metodo para modificar la salud del jefe*/
    /**@param recibe como parametro un entero int con la salud que se le disminuira al jefe*/
    public void setHealt(int unAtaque)
    {
        healt-=unAtaque;
    }
    
    /**metodo para acceder a la salud del jefe desde otras clases*/
    /**@return regresa un entero int con la salud del jugador actual*/
    public int getHealt()
    {
        return healt;
    }
    
}
